# def 定义函数
def name():
    print("chil m ")


name()

# def fnc(num):
#     res = 1
#     for i in range(1, num):
#         res *= num
#     return res
# num = int(input('请输入一个数'))
# fnc1 = fnc(num)
# print(fnc1)

# *args 可变参数 可传0个 多个
# 模块管理函数


# 1-100
def get_num():
    total = 0
    for i in range(1, 101):
        total += i
    print(total)


# 判断一个数是否是偶数
def getOu(num):
    if num % 2 == 0:
        print(f"{num}是偶数")
    else:
        print(f"{num}不是偶数")


# num1 = int(input('请输入一个数：'))
# getOu(num1)


# 关键字参数
# **kwargs 接收所有的关键字参数
def isTriangle(*args, **kwargs):
    print(*args, kwargs)


isTriangle(1, 2, 3, a=1, b=2)


# 匿名函数
# 无参数
f = lambda: "nichifanlema"
print(f())
# 带参数
x = lambda a, b, c: a + b + c
print(x(1, 2, 3))
# 与map一起使用
# x ** 2 x的2次方
num = [1, 2, 3, 4, 5, 6, 7]
list1 = list(map(lambda x: x**2, num))
print(list1)
# filter函数
list2 = list(filter(lambda x: x % 2 == 0, num))
print(list2)


# 闭包  外部函数中有内部函数，并返回
def func(num):
    print(f"waibu{num}")

    def func1(num1):
        print(f"neibu{num1}")

    return func1


func(1)(2)


# 装饰器  是闭包   不改变原来函数，给原有函数添加新功能
def user_loging(func):
    def wrapper():
        print("我被装饰了")
        return func()

    return wrapper


@user_loging
def foo():
    print("i am foo")


foo()


# 递归
def func(num):
    if num < 1:
        return 1
    return num * func(num - 1)


print(func(5))


def fib(n):
    if n in (1, 2):
        return 1
    return fib(n - 1) + fib(n - 2)


for i in range(1, 21):
    print(fib(i))
